package baidu.ocr;

import cn.hutool.core.collection.SpliteratorUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.apache.logging.log4j.util.Base64Util;

import java.net.URLEncoder;
import java.util.Base64;

/**
 * @version 1.0.0
 * Created by cyd on 2024-08-28 16:03:08
 * @ClassName : baidu.ocr.ImageOcrTest
 * @Description : 类描述
 */
public class ImageOcrTest {

    public static void main(String[] args) {
        String result = meter();
        System.out.println(result);
    }


    public static String meter() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/meter?access_token=";
        try {
            // 本地文件路径 C:\Users\Admin\Desktop\公共工程ocr研发
            String filePath = "C:/Users/Admin/Desktop/公共工程ocr研发/电表照片/1.png";

            byte[] imgData = FileUtil.readBytes(filePath);
            byte[] imgDataByBase64 = Base64.getEncoder().encode(imgData);
            String imgStr = new String(imgDataByBase64);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam;
            JSONObject obj = JSONUtil.createObj();
            obj.putOpt("image", imgParam).putOpt("probability", true);

            // 注意这里仅为了简化编码每一次请求都去获取access_token，线上环境access_token有过期时间， 客户端可自行缓存，过期后重新获取。
            String accessToken = getAuth();
            System.out.println("accessToken:" + accessToken);
            System.out.println("--------------------------------");
            System.out.println(obj.toJSONString(0));
            System.out.println("--------------------------------");
//            String result = HttpUtil.post(url, accessToken, param);
            HttpResponse httpResponse = HttpUtil.createPost(url + accessToken)
                    .header("Content-Type", "application/x-www-form-urlencoded")
                    .body(obj.toString())
                    .execute();
            return httpResponse.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取权限token
     *
     * @return 返回示例：
     * {
     * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567",
     * "expires_in": 2592000
     * }
     */
    public static String getAuth() {
        // 官网获取的 API Key 更新为你注册的
        String clientId = "VnYXSLYNYqzTxCyS7SayLuxY";
        // 官网获取的 Secret Key 更新为你注册的
        String clientSecret = "lG4oO0N4FNT6YZZcqTKLcUeGVWRWzigg";
        return getAuth(clientId, clientSecret);
    }

    /**
     * 获取API访问token
     * 该token有一定的有效期，需要自行管理，当失效时需重新获取.
     *
     * @param ak - 百度云官网获取的 API Key
     * @param sk - 百度云官网获取的 Securet Key
     * @return assess_token 示例：
     * "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.282335-1234567"
     */
    public static String getAuth(String ak, String sk) {
        // 获取token地址
        String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
        String getAccessTokenUrl = authHost
                // 1. grant_type为固定参数
                + "grant_type=client_credentials"
                // 2. 官网获取的 API Key
                + "&client_id=" + ak
                // 3. 官网获取的 Secret Key
                + "&client_secret=" + sk;

        String result = HttpUtil.get(getAccessTokenUrl);
        if (JSONUtil.isJson(result)) {
            JSONObject jsonObject = JSONUtil.parseObj(result);
            return jsonObject.get("access_token", String.class);
        }
        return null;
    }
}
